package redis

func (k *key) Exists() BoolResult {
	return k.cmd("EXISTS", k.key)
}

func (k *key) Type() StringResult {
	return k.cmd("TYPE", k.key)
}

func (k *key) Rename(newKey string) BoolResult {
	if k.c.prefix != "" {
		newKey = k.c.k(newKey)
	}
	return k.cmd("RENAME", k.key, newKey)
}

func (k *key) RenameNx(newKey string) BoolResult {
	if k.c.prefix != "" {
		newKey = k.c.k(newKey)
	}
	return k.cmd("RENAMENX", k.key, newKey)
}

func (k *key) Move(db int) BoolResult {
	return k.cmd("MOVE", k.key, db)
}

func (k *key) Del() IntResult {
	var args []any
	for _, kk := range k.keys {
		args = append(args, kk)
	}
	return k.cmd("DEL", args...)
}

func (k *key) Unlink() IntResult {
	var args []any
	for _, kk := range k.keys {
		args = append(args, kk)
	}
	return k.cmd("UNLINK", args...)
}

func (k *key) Expire(seconds int) BoolResult {
	return k.cmd("EXPIRE", k.key, seconds)
}

func (k *key) ExpireAt(timestamp int) BoolResult {
	return k.cmd("EXPIREAT", k.key, timestamp)
}

func (k *key) TTL() IntResult {
	return k.cmd("TTL", k.key)
}

func (k *key) Persist() BoolResult {
	return k.cmd("PERSIST", k.key)
}

func (k *key) PExpire(milliseconds int) BoolResult {
	return k.cmd("PEXPIRE", k.key, milliseconds)
}

func (k *key) PExpireAt(timestamp_ms int) BoolResult {
	return k.cmd("PEXPIREAT", k.key, timestamp_ms)
}

func (k *key) PTTL() IntResult {
	return k.cmd("PTTL", k.key)
}

// func (k *key) RandomKey() StringResult {
//	return k.cmd("RANDOMKEY")
// }
